0 REM << RR43-1 >> 1 REM=================================== 2 PRINT"[147] LED DRIVER" 3 REM RUPERT REPORT #43 4 REM USE CASSETTE PORT MOTOR OUTPUT 5 REM TO LIGHT LED 6 REM=================================== 10 REM ====== INITIALIZATION ========== 20 DEF FNS(B)=PEEK(M) OR 2^B :REM SET BIT B OF LOCATION M 30 DEF FNC(B)=PEEK(M) AND NOT 2^B :REM CLEAR BIT B OF LOCATION M 40 M=0 : POKE M,FNS(4) :REM SET DDR FOR BIT 4 TO BE OUTPUT 50 M=1 : POKE M,FNC(4) :REM CLEAR BIT 4 OF $1 SO $192 IS NOT CLEARED BY IRQ 60 POKE 192,1 :REM SET $192 SO IRQ DOES NOT TURN MOTOR ON 70 PK=PEEK(1) : L1=PK AND NOT 32 : L0=PK OR 32 :REM ON AND OFF POKE VALUES 80 DF=.50 :REM DUTY FACTOR = 50% 90 K=2.5 : P=10^K : W1=DF*P : W0=P-W1 :REM INITIAL PERIOD AND PULSE WIDTHS 95 PRINT "[147]" : GOSUB 2000 :REM GRAPH 100 REM ====== MAIN LOOP =============== 110 IF DF=0 THEN 130 120 POKE 1,L1 : FOR N=1 TO W1: NEXT 130 GET A$ : IF A$<>"" THEN GOSUB 1000 140 IF DF=1 THEN 120 150 POKE 1,L0 : FOR N=1 TO W0 : NEXT 160 GET A$ : IF A$<>"" THEN GOSUB 1000 170 GOTO 110 1000 REM ====== KEYBOARD INPUT ========= 1010 REM + INCREASES FREQUENCY 1020 REM - DECREASES FREQUENCY 1030 REM 1-9 = DUTY FACTOR (10 TO 90%) 1040 REM 0 = TOGGLE DUTY FACTOR (0/100%) 1050 REM 1060 IF VAL(A$)>0 THEN DF=0.1*VAL(A$) : REM 1 TO 9 SELECTED 1070 IF A$="0" THEN DF=-1*(DF=0) : REM TOGGLE 0 OR 1 1080 IF A$="-" THEN K=K+.5 :IF K>3.5 THEN K=3.5 : REM INCREASE PERIOD 1090 IF A$="+" THEN K=K-.5 :IF K<.5 THEN K=.5 :REM DECREASE PERIOD/INCREASE FREQ 1100 P=10^K :REM GET PERIOD 1110 W1=DF*P : W0=P-W1 :REM PULSE WIDTHS 1120 GET A$ : IF A$<>"" THEN 1060 : REM ANY MORE KEYS? 1130 GOSUB 2000 :REM DISPLAY BAR GRAPH 1140 RETURN 2000 REM ======= BARGRAPHS ============= 2010 PRINT""; : FOR N=1 TO 33 : PRINT"[190]"; : NEXT : PRINT 2020 PRINT"DUTY FACTOR: "; : GOSUB 2100 2025 IF DF=0 THEN PRINT"0"; : GOTO 2040 2030 FOR N=1 TO DF*10+.1 : PRINT "[184][184]"; : NEXT 2040 PRINT : PRINT"FREQUENCY : "; : GOSUB 2100 2050 FOR N=1 TO 10-3*(K-.5) 2060 PRINT"[185][185]"; : NEXT 2070 RETURN 2100 FOR N=1 TO 20 : PRINT" "; : NEXT 2110 FOR N=1 TO 20 : PRINT"[157]"; : NEXT 2120 RETURN 2990 REM ====== DUTY FACTOR DEMO ======= 2991 REM > ADD LINE 99 GOTO 3000 2992 REM > RAPIDLY MOVE THE LED 2993 REM BACK AND FORTH. 2994 REM > LOOK AT THE RELATIVE WIDTHS 2995 REM OF LIGHT AND DARK STREAKS 2996 REM AS THE DUTY FACTOR CHANGES. 2997 REM =============================== 3000 P0=9 : P1=1 : GOSUB 3050 3010 P0=5 : P1=5 : GOSUB 3050 3020 P0=1 : P1=9 : GOSUB 3050 3030 GOTO 3000 3050 FOR CT=1 TO 50 3060 POKE 1,L0 : FOR N=1 TO P0 : NEXT 3070 POKE 1,L1 : FOR N=1 TO P1 : NEXT 3080 NEXT : RETURN